package cn.com.cifi.mars.mapper.mars;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import cn.com.cifi.mars.bean.dto.BudgetVersionDto;
import cn.com.cifi.mars.bean.dto.DynamicVersionDto;
import cn.com.cifi.mars.bean.dto.PriceValueCollectDto;
import cn.com.cifi.mars.bean.dto.SupplyPlanValueDetailDto;
import cn.com.cifi.mars.entity.SupplyPlanVersionDetail;

/**
 * <p>
 * 供货计划货值表 Mapper 接口
 * </p>
 *
 * @author yyd
 * @since 2019-09-11
 */
public interface SupplyPlanVersionDetailMapper extends BaseMapper<SupplyPlanVersionDetail> {
	 /**
	 * 方法描述：根据版本Id获取所有数据
	 * @param supplyVersionId
	 * @param key
	 * @return List<SupplyPlanValueOrg>
	 * 创建人：yyd
	 * 创建时间：2019年9月11日 下午8:20:09
	*/
	List<SupplyPlanVersionDetail> selectByVersionId(@Param("versionId")String versionId, 
													@Param("isDel")int isDel);
	
	 /**
	 * 方法描述：归集整理价格版本-投资版数据
	 * @param priceVersionId 价格版本Id
	 * @param isDel 是否有效
	 * @return List<PriceValueCollectDto>
	 * 创建人：yyd
	 * 创建时间：2019年9月12日 下午5:18:11
	*/
	List<PriceValueCollectDto> selectPriceValueOrgCollect(@Param("versionId")String versionId,
														  @Param("isDel") int isDel);
	
	 /**
	 * 方法描述：批量添加供货计划版本数据
	 * @param priceValueList 价格管理版本数据
	 * @param supplyPlanVersionId 供货计划ID
	 * 创建人：yyd
	 * 创建时间：2019年9月22日 下午5:08:35
	*/
	void insertBatch(@Param("list")List<PriceValueCollectDto> list, 
			         @Param("supplyPlanVersionId")String supplyPlanVersionId);
	
	void insertBatchTemp(@Param("list") List<SupplyPlanVersionDetail> list, @Param("supplyPlanVersionId") String supplyPlanVersionId);
	
	/**
	 * 方法描述：批量添加供货计划预算版本数据
	 * @param list 
	 * @param supplyPlanVersionId 供货计划ID
	 * 创建人：yyd
	 * 创建时间：2019年9月22日 下午5:08:35
	*/
	void insertBudgetBatch(@Param("list")List<SupplyPlanVersionDetail> list, 
						   @Param("supplyPlanVersionId")String supplyPlanVersionId);
	
	/**
	 * 
	 * 方法描述：删除数据
	 * @param supplyPlanVersionId
	 * @param key void
	 * 创建人：yyd
	 * 创建时间：2019年10月9日 下午5:41:29
	 */
	void deleteRecord(@Param("versionId")String versionId);
	/**
	 * 
	 * 方法描述：根据项目ID获取所有的供货时间年份
	 * @param projectId
	 * @return List<Map<String,Object>>
	 * 创建人：yyd
	 * 创建时间：2019年10月15日 下午2:59:43
	 */
	List<Map<String, Object>> selectYears(@Param("projectId")String projectId,@Param("isDel")int isDel);
	/**
	 * 
	 * 方法描述：获取层级层级全路劲
	 * @param versionId 版本ID
	 * @param type 层级类型
	 * @param code 层级Code
	 * @return List<SupplyPlanVersionDetail>
	 * 创建人：yyd
	 * 创建时间：2019年10月23日 下午4:19:20
	 */
	List<SupplyPlanVersionDetail> selectOrgFullPath(@Param("versionId")String versionId, 
			                                        @Param("code")String code, 
			                                        @Param("year")String year,
	                                                @Param("month")String month,
			                                        @Param("isDel")int isDel);
	/**
	 * 
	 * 方法描述：获取子级数据
	 * @param versionId 版本ID
	 * @param orgFullPath 层级全路劲
	 * @param year 年份
	 * @param month 月份
	 * @return List<SupplyPlanVersionDetail>
	 * 创建人：yyd
	 * 创建时间：2019年10月23日 下午4:23:33
	 */
	List<SupplyPlanVersionDetail> selectCurrentAndChildList(@Param("versionId")String versionId,
			                                                @Param("orgFullPath") String orgFullPath,
			                                                @Param("year")String year,
			                                                @Param("month")String month, 
			                                                @Param("isDel")int isDel);
	/**
	 * 
	 * 
	 * 方法描述：获取所有父级数据
	 * @param versionId 版本ID
	 * @param pid 
	 * @return List<SupplyPlanVersionDetail>
	 * 创建人：yyd
	 * 创建时间：2019年10月23日 下午4:24:56
	 */
	List<SupplyPlanVersionDetail> selectParentList(@Param("versionId")String versionId, 
			                                       @Param("pid")String pid, 
			                                       @Param("isDel")int isDel);

	/**
	 * 
	 * 
	 * 方法描述：获取分期下最新预算版数据
	 * @param stageId 分期ID
	 * @param isDel 
	 * @return List<SupplyPlanVersionDetail>
	 * 创建人：yyd
	 * 创建时间：2019年10月23日 下午4:24:56
	 */
	List<SupplyPlanVersionDetail> selectNewestBudgetDetailList(@Param("stageId")String stageId, @Param("isDel")int isDel);

	SupplyPlanValueDetailDto selectStageMonthData(@Param("versionId")String versionId, @Param("month")String month, @Param("isDel")int isDel);
	
	/**
	 * 
	 * @Description：获取当前年最新全年预算版数据
	 * @author：yyd
	 * @date：2020年2月10日 上午11:32:40
	 */
	List<SupplyPlanVersionDetail> selectNewsetAllYearBudgetList(@Param("item") BudgetVersionDto budgetVersionDto);
	/**
	 * 
	 * @Description：获取当前年最新动态版版数据
	 * @author：yyd
	 * @date：2020年2月10日 上午11:32:40
	 */
	List<SupplyPlanVersionDetail> selectNewestDynamicList(@Param("item")DynamicVersionDto prepareDynamicParameters);

	int updateVersion(@Param("versionId")String versionId, @Param("isDel")int isDel);

	List<SupplyPlanVersionDetail> selectVersionDetailList(@Param("versionIds") List<String> versionIds,@Param("isDel")int isDel);

	List<SupplyPlanVersionDetail> selectAllList(@Param("isDel")int isDel);

	void copySupplyPlanVersionDeatil(@Param("sourceVersionId")String versionId, @Param("targetVersionId")String supplyPlanVersionId);

	int selectSupplyIsSalableOrStageSelfSustainment(@Param("supplyPlanVersionId")String supplyPlanVersionId,@Param("salyTypeList") List<String> salyTypeList);
}
